package br.com.estevam.sisfin.entities;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.apache.tapestry5.beaneditor.NonVisual;
import org.apache.tapestry5.beaneditor.Validate;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Index;

@Entity
@Table(name = "TblPessoal")
public class Pessoal extends AbstractEntity {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@NonVisual
	private long id;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable = false)
	private Date dataCadastro =  new Date();
	
	@Column(length = 11, nullable = false, unique = true)
	@Validate("required,minlength=11,maxlength=11")
	@Index(name = "ix_pessoal_cpf")
	private String cpf;

	@Column(length = 100, nullable = false)
	private String nome;
	
	@Temporal(TemporalType.DATE)
	private Date dataNasc;
	
	@ManyToOne
	@JoinColumn(name="idSexo", nullable = false)
	@ForeignKey(name = "FK_pessoal_sexo")
	private Sexo sexo;
	
	@ManyToOne
	@JoinColumn(name="idEstado", nullable = false)
	@ForeignKey(name = "FK_pessoal_estado")
	private Estado estado;
	
	@ManyToOne
	@JoinColumn(name="idEstadoCivil", nullable = false)
	@ForeignKey(name = "FK_pessoal_estadocivil")
	private EstadoCivil estadoCivil;
	
	@Inject
	public Pessoal() { }

	public Pessoal(Date dataCadastro, String cpf, String nome, Date dataNasc, Sexo sexo, Estado estado, EstadoCivil estadoCivil) {
		super();
		this.dataCadastro = dataCadastro;
		this.cpf = cpf;
		this.nome = nome;
		this.dataNasc = dataNasc;
		this.sexo = sexo;
		this.estado = estado;
		this.estadoCivil = estadoCivil;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Date getDataNasc() {
		return dataNasc;
	}

	public void setDataNasc(Date dataNasc) {
		this.dataNasc = dataNasc;
	}

	public Sexo getSexo() {
		return sexo;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}
	
	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public EstadoCivil getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(EstadoCivil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	@Transient
	public String getDescricaoSexo(){
		return sexo.getDescricao();
	}
	
	public String toString(){
		return "" + id + "---" + getUserId();
	}

}
